#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#
# Benchmarks for data upload in inmemory mode (persistence disabled).
#

now0=`date +'%H%M%S'`

# JVM options.
JVM_OPTS=${JVM_OPTS}" -DIGNITE_QUIET=false"

# Uncomment to enable concurrent garbage collection (GC) if you encounter long GC pauses.
JVM_OPTS=${JVM_OPTS}" \
-Xms1g \
-Xmx8g \
-Xloggc:./gc${now0}.log \
-XX:+PrintGCDetails \
-verbose:gc \
-XX:+UseParNewGC \
-XX:+UseConcMarkSweepGC \
-XX:+PrintGCDateStamps \
"

#Ignite version
ver="RELEASE-"

# List of default probes.
# Add DStatProbe or VmStatProbe if your OS supports it (e.g. if running on Linux).
BENCHMARK_DEFAULT_PROBES=TotalTimeProbe

# Packages where the specified benchmark is searched by reflection mechanism.
BENCHMARK_PACKAGES=org.yardstickframework,org.apache.ignite.yardstick

# Flag which indicates to restart the servers before every benchmark execution.
RESTART_SERVERS=true

# Probe point writer class name.
# BENCHMARK_WRITER=

# The benchmark is applicable only for 2 servers (the second server is started in client mode) and 1 driver.
SERVER_HOSTS=localhost,localhost
DRIVER_HOSTS=localhost

# Remote username.
# REMOTE_USER=

# Number of nodes, used to wait for the specified number of nodes to start.
nodesNum=$((`echo ${SERVER_HOSTS} | tr ',' '\n' | wc -l` + `echo ${DRIVER_HOSTS} | tr ',' '\n' | wc -l`))

# Backups count.
b=1

# Warmup.
w=0

# Threads count.
t=1

# Sync mode.
sm=FULL_SYNC

# Parameters that should be the same across all the benchmarks launches.
commonParams="\
-cfg ${SCRIPT_DIR}/../config/ignite-localhost-config.xml -nn ${nodesNum} -b ${b} \
  --warmup ${w} --operations 1 \
  --threads ${t} --syncMode ${sm} -sn IgniteNode \
  --upload-rows 1000000 -cl \
  --clientNodesAfterId 0 \
  --atomic-mode ATOMIC \
  --idx-count 2 \
"

thinUrl="-jdbc jdbc:ignite:thin://auto.find/"

# Note: Don't forget to fill thick's config with cluster addresses too.
v2Url="-jdbc jdbc:ignite:cfg://cache=query@config/ignite-jdbc-config.xml"
        

# Run configuration which contains all benchmarks.
# Note that each benchmark is set to run only one time, warmup parameter is set to 0 due to custom warmup operation.
CONFIGS="\
${commonParams} -dn NativePutAllBenchmark -ds ${ver}upload-native-putAll --upload-jdbc-batch-size 1000, \
${commonParams} -dn NativePutBenchmark -ds ${ver}upload-native-put, \
${commonParams} -dn NativeStreamerBenchmark -ds ${ver}upload-native-streamer --streamer-local-batch-size 1000, \
${commonParams} -dn NativeSqlInsertBenchmark -ds ${ver}upload-native-sql-insert, \
  \
${commonParams} -dn CopyBenchmark ${thinUrl} -ds ${ver}upload-jdbc-thin-copy, \
${commonParams} -dn InsertBenchmark ${thinUrl} -ds ${ver}upload-jdbc-thin-streaming --use-streaming true --streamer-ordered false --streamer-local-batch-size 1024, \
  \
${commonParams} -dn InsertBenchmark ${thinUrl} -ds ${ver}upload-jdbc-thin-insert, \
${commonParams} -dn InsertBenchmark ${v2Url} -ds ${ver}upload-jdbc-v2-insert, \
${commonParams} -dn BatchedInsertBenchmark ${thinUrl} -ds ${ver}upload-jdbc-thin-batched-insert --upload-jdbc-batch-size 1000, \
${commonParams} -dn BatchedInsertBenchmark ${v2Url} -ds ${ver}upload-jdbc-v2-batched-insert --upload-jdbc-batch-size 1000 \
"
